#include "wpt_container.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "log_stream.h"

#define STRING_MAX 1024

/*--------------------------------------------------------------------------*/
typedef struct 
{
	char			szName[128];
	unsigned long	nDateTime;

	double			lat;
	double			lon;
	long			alt;
} WayPoint;


wpt_container::wpt_container(char* file)
{
	char szDatum[256];
	char szTemp[STRING_MAX];
	
	FILE *fp = fopen(file, "rt");
	
	if (!fp)
	{
		logstream_write("failed to open waypoint file\n");
		return;
	}

	fgets(szTemp, STRING_MAX, fp);
	szTemp[strlen(szTemp)-1] = 0;
	
	if ( !strncmp(szTemp, "OziExplorer Waypoint File", strlen("OziExplorer Waypoint File")) )
	{
		WayPoint wpt;

		fgets(szTemp, STRING_MAX, fp);
		szTemp[strlen(szTemp)-1] = 0;

		strcpy(szDatum, szTemp);

		fgets(szTemp, STRING_MAX, fp);      // skipping
		fgets(szTemp, STRING_MAX, fp);      // skipping

		while ( 1 )
		{
			if(!fgets(szTemp, STRING_MAX, fp))
				break;

			memset(&wpt, 0, sizeof(WayPoint));
			szTemp[strlen(szTemp)-1] = 0;

			char* pszThis;
			char* pszThat;

			// skipping number - for Lowrance/Eagles and Silva GPS receivers
			pszThis	= szTemp;
			pszThat	= strchr(pszThis, ',');

			// reading Name - the waypoint name
			pszThis	= pszThat + 1;
			pszThat = strchr(pszThis, ',');
			*pszThat = 0;
			strcpy(wpt.szName, pszThis);

			// reading latitude
			pszThis	= pszThat + 1;
			pszThat = strchr(pszThis, ',');
			*pszThat = 0;

			wpt.lat = atof(pszThis);

			// reading longitude
			pszThis	= pszThat + 1;
			pszThat = strchr(pszThis, ',');
			*pszThat = 0;

			wpt.lon = atof(pszThis);

			// reading time
			pszThis	= pszThat + 1;
			pszThat = strchr(pszThis, ',');
			*pszThat = 0;

			double pascalDateTime = atof(pszThis);
        	time_t unixDateTime = (pascalDateTime - ((70*365L)+17 + 2)) * (24L*60*60);
			wpt.nDateTime = unixDateTime;

			// skipping 10 fields

			pszThis	= pszThat + 1;
			for ( long i = 0; i < 9; i++ )
			{
				pszThat	= strchr(pszThis, ',');
				pszThis	= pszThat + 1;
			}
			pszThat = strchr(pszThis, ',');
			*pszThat = 0;

			wpt.alt = atol(pszThis);

			double height;
			
			printf("wpt: %s: %f, %f\n", wpt.szName, wpt.lat, wpt.lon);

/*			
			wcstombs(szDatum, wsDatum, wsDatum.GetLength()+1);

			long nDatum = GPSDatum_GetEllipsoid(szDatum);

			GPS_Math_Known_Datum_To_WGS84_M(wpt.lat,
											wpt.lon,
											0,
				     						&wpt.lat,
											&wpt.lon,
											&height, nDatum);
*/
		}
	}
	
	fclose(fp);
}
		
wpt_container::wpt_container()
{
}


